Scheduling algorithm & State

스케쥴링 알고리즘
프로세스(process)란?
실행중인 프로그램을 프로세스라고 한다.
    프로세스: 메모리에 올려져서, 실행 중인 프로그램
    코드 이미지(바이너리): 실행 파일, 예) ELF format

응용 프로그램 =! 프로세스
    응용 프로그램은 여러 개의 프로세스로 이루어질 수 있음
하나의 응용 프로그램은 여러개의 프로세스(프로그램)가 상호작용을 하면서 실행될 수 있다.

간단한 C/C++ 프로그램을 만든다면, 하나의 프로세스이지만,
여러 프로그램을 만들어서, 서로 통신하는 프로글매을 작성할 수도 있음(IPC 기법)
프로그램을 실행하게 되면 CPU를 차지하면서 수행하는 수행 주체가 프로세스이다.
프로그램은 하나지만, 이 프로그매을 실행하는 인스턴스는 여러 개 생길 수 있다.
스켸줄러와 프로세스
스케쥴러가 프로세스 실행을 관리

스케줄링 알고리즘
시분할 시스템-
시불할 시스템-> 프로세스 응답 시간을 최대한 짧게
멀티 프로그래밍-> CPU 활용도를 최대한 높여서, 프로세스를 빨리 실행
FIFO스케줄러
프로세스가 저장매체를 읽는 다든지, 프린팅을 한다든지 하는 작업 없이, 계속 CPU를 처음부터 끝까지 사용된다고 가정
각 프로세스의 처리 시간을 스케줄러가 알고있다고 가정

FIFO(First In First Out): 가장 간단한 스케줄러, 먼저 들어온 순서대로 프로세스를 실행
배치 처리 시스템과 유사
FCFS(First COme First Served)라고도 불림
최단 작업 우선(Shortest Job First, SJF) 스케줄러
가장 프로세스 실행시간이 짧은 프로세스부터 먼저 실행을 시키는 알고리즘

프로세서가 모든 작업 처리 시간을 알고 잇어야 한다.
참고)
RealTime OS(RTOS): 응용 프로그램 실시간 성능 보장을 목표로 하는 OS
    정확하게 프로그램 시작, 완료 시간을 보장
    보통 GPOS보다 간단하게 구성되는 경우가 많다.
    공장의 공정같이 시간이 중요한 작업에서 사용
        Hardware RTOS, Software RTOS

General Purpose OS(GPOS): 프로세스 실행시간에 민감하지 않고 일반적인 목적으로 사용되는 OS
    예) Windows, Linux
우선순위 기반 스케쥴러(Priority-Based 스케쥴러)
    정적 우선순위
        프로세스마다 우선순위를 미리 지정
    동적 우선순위
        스케쥴러가 상황에 따라 우선순위를 동적으로 변경
            ex) 대기 시간이 길었던 프로세스에 대하여 상대적으로 높은 우선순위 부여
Round Robin 스케쥴러
시분할 시스템이라고 할 수 있다.
정해진 시간동안 프로세스를 처리하고 다 못한 처리는 가장 뒤 Queue로 넣어준다.
정리
- 다양한 목적의 기본 스케쥴링 알고리즘
        FIFO(FCFS) 스케쥴링 알고리즘
        SJF 스케쥴링 알고리즘
        우선순위 기반 스케쥴링 알고리즘
            정적 우선순위
            동적 우선순위
        RoundRobin 스케쥴링 알고리즘
            시분할 시스템 기반
멀티 프로그래밍과 Wait
멀티 프로그래밍: CPU 활용도를 극댜화 하는 스케쥴링 알고리즘
Wait: 간단히 저장매체로부터 파일 읽기를 기다리는 시간으로 가정
프로그램이 진행되는 흐름상 프로세스가 무한하지 않다면, wait는 생길 수 밖에 없다.
프로세스 상태 (정보)
프로세스 마다 각각의 상태가 있고 이를 통해 스케쥴러가 작업을 수행

running state 현재 CPU에서 실행 상태
ready state: CPU에서 실행 가능 상태(실행 대기 상태)
block state: 특정 이벤트 발생 대기 상태 ex) 프린팅 대기, 저장매채에서 정보(파일)을 읽음

new(프로세스 생성)
exit(프로그램 종료)

single core에서는 running state는 0이거나 1이다.

최근의 프로세스는 보다 복잡하기 때문에 더 많은 상태가 존재한다.
프로세스 상태간 관계
running->block        process blocks for input
ready->running        scheduler picks another process
running->ready        scheduler picks this process(시분할 시스템, 다중 프로그래밍)
block->ready        process becomses avilable
OS에서는 내부적으로 Queue(FIFO)를 구성해서 위의 알고리즘 구현될 수 있다.(Round Robin)
ready state queue
running state queue 
block state queue

ready state queue에서 pop된(가장 먼저 들어간) 프로세스 CPU에서 처리(running state),
시분할 해당 프로세스 처리 후, 다시 ready state queue로 push
wait가 필요한 경우 block state queue로 push
ready state queue에서 pop된 프로세스 running state로 push
(ready state queue가 비어있는 경우(idle) 상태일 경우 CPU는 작업을 처리하지 않는다.)